package com.km.team.phsystem.dao.mybatis.custom;

import com.km.team.phsystem.beans.pojo.QueueInfo;
import com.km.team.phsystem.beans.pojo.custom.QueueInfoCustom;
import com.km.team.phsystem.beans.vo.QueueTODOCount;
import com.km.team.phsystem.beans.vo.QueueWatingCount;
import com.km.team.phsystem.beans.vo.QueueingListVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface QueueInfoMapperCustom {
    /**
     * 统计当天排队情况
     * @param busiType
     * @return
     */
    QueueWatingCount countQueueing(@Param("busiType") String busiType,
                                   @Param("queueType") String queueType);

    Integer getMaxId();

    QueueInfoCustom getMyCurrentQueueInfo(String mobile);

    /**
     * 统计之前有多少业务等待
     * @param queueId
     * @return
     */
    QueueWatingCount getPreviousQueueCount(@Param("queueId") Integer queueId,
                                           @Param("busiTypeId") Integer busiTypeId,
                                           @Param("queueTypeId") Integer queueTypeId);

    /**
     * 统计指定窗口已取号，但是为处理的号
     * @param vo
     * @return
     */
    int getQueueingCount(QueueingListVo vo);

    /**
     * 查询排队列表
     * @param vo
     * @return
     */
    List<QueueInfoCustom> getQueueingList(QueueingListVo vo);

    /**
     * 更新与窗口的绑定关系
     * @param idList
     */
    void updateWindowId(@Param("idList") List<Integer> idList, @Param("windowId") String windowId);

    /**
     * 更新业务状态
     * @param bizId
     * @param bizStatus
     * @return
     */
    int updateBizStatus(@Param("id") Integer bizId, @Param("queueStatus")String bizStatus);

    /**
     * 获得当前待办业务数，参数可选
     * @param busiType 业务类型
     * @param queueType 队列类型
     * @return
     */
    QueueTODOCount countTODO(@Param("busiType") String busiType, @Param("queueType") String queueType);

    /**
     * 获得下一个客户，即排队时间最久的那位客户
     */
    QueueInfo getNextCustom();

    /**
     * 获得前N位预约排号的客户,以预约时间升序排列
     *
     */
    List<QueueInfo> getLatestNInfos(@Param("maxNum") Integer maxNum);

    /**
     * 批量超时列表
     * @param timeOutList
     * @return
     */
    int batchUpdateForTimeOut(List<QueueInfo> timeOutList);
}